guice整合guice-servlet,web开发 <5>

guice整合guice-servlet,web开发 <5>

介绍

Guice Servlet 为使用web应用程序和Servlet容器提供了一个完整的模式。. Guice’s servlet
扩展允许从你的servlet应用中完全淘汰web.xml,并且具有类型安全(type-safe)的优势。
符合Java方式的配置你的servlet和filter组件。

这不仅在于可以使用更好的API来配置你的web应用程序,而且也在于在web应用组件中加入依赖注入,意味着你的servlet和filter得益于以下几个方面:

  • 构造方法注入(Constructor injection)
  • 类型安全,更符合习惯的配置方式(Type-safe, idiomatic configuration)
  • 模块化(打包和发布个性化的Guice Servlet类库
  • Guice 面向切面编程
  • 在标准的servlet生命周期都将受益。

==guice servlet简化了传统servlet的开发。==

具体如下:

1
2
3
4
5
6
7
8
9
10
11
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class><!--这个是guice servlet的过滤器-->
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>cn.northpark.listener.GoogleGuiceServletContextListener</listener-class><!--这个是用于注册module及servlet的-->
</listener>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package cn.northpark.listener;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.servlet.GuiceServletContextListener;
import cn.northpark.UserModule;

public class GoogleGuiceServletContextListener extends GuiceServletContextListener {

@Override
protected Injector getInjector() {

return Guice.createInjector(new UserModule());
//如果绑定多个module,需要像下面这样就可以了
//return Guice.createInjector(new UserModule(),new UserModule());
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import com.google.inject.AbstractModule;
import com.google.inject.servlet.ServletModule;
import com.ming.core.web.filter.EncodeFilter;
import cn.northpark.action.UserServlet;
public class UserModule extends AbstractModule {


@Override
protected void configure() {
install(new ServletModule(){
@Override
protected void configureServlets() {

//配置你访问的servlet
//serve("/UserServlet").with(UserServlet.class);

//如果你一个servlet拥有多个访问地址,这样配置就可以了
serve("/UserServlet","/UserController").with(UserServlet.class);

//如果你想你的url支持正则匹配,可以像下面这样写
//serveRegex("^user").with(UserServlet.class);

//同理filter配置如下
//filter("/encodeFilter").through(EncodeFilter.class);

//多个地址
//filter("/encodeFilter","/haha").through(EncodeFilter.class);

//支持正则
//filterRegex("^aaa").through(EncodeFilter.class);

}
});

}


}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package cn.northpark.action;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import cn.northpark.entity.User;
import cn.northpark.service.UserService;

/**
*
* @author bruce
*
*/
@Singleton
public class UserServlet extends HttpServlet {


private static final long serialVersionUID = 1L;

@Inject
private UserService userService;

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

String account = request.getParameter("account");
int userId = Integer.valueOf(request.getParameter("userid"));
User u = new User();
u.setAccount(account);
u.setUser_id(userId);
List<User> ulist=new ArrayList<>();
ulist.add(u);
try {
userService.add(u);
System.out.println("ok");
} catch (Exception e) {
System.out.println("error");
e.printStackTrace();
// 注意:调用service层的方法出异常之后,继续将异常抛出,这样在TransactionFilter就能捕获到抛出的异常,继而执行事务回滚操作
throw new RuntimeException(e);
}

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

doGet(request, response);
}

}
生活不止苟且,还有我喜爱的海岸.